package org.nielin.bestwaper.core.filter;

import java.util.Set;

import com.nms.service.config.SystemConf;

/**
 * 通用的白名单过滤的工具类
 * 白名单来自配置中心allow_ip项
 * @author rockydai
 *
 */
public class IpTable
{
    /**
     * 判断ip是否合法
     * @param ip
     * @return
     */
    public static boolean isAllowIp(String ip) 
    {
        if(ip == null || "".equals(ip))
        {
            return false;
        }
        Set<String> allowIps = SystemConf.getInstance().getAllowIpList();
        for(String s : allowIps)
        {
            if(ip.startsWith(s))
            {
                return true;
            }
            else
            {
                continue;
            }
        }
        return false;
    }
    
    /**
     * 是否在ip黑名单中
     * @param ip
     * @return
     */
    public static boolean isBlackIp(String ip)
    {
        return SystemConf.getInstance().getBlackIpMap().get(ip) != null;
    }
    
    /**
     * 获得给定ip所属的运营商英文代号，仅限于在ip白名单里的
     * @param ip
     * @return
     */
    public static String getType(String ip)
    {
        if(ip == null || "".equals(ip))
        {
            return "unknown";
        }
        String tmp = ip;
        int i = tmp.length() - 1;
        do
        {
            tmp = tmp.substring(0, i + 1);
            String type = SystemConf.getInstance().getAllowIpMap().get(tmp);
            if(type != null)
            {
                return type;
            }
            i = tmp.substring(0, i).lastIndexOf(".");
        }while(i > 0);
        return "unknown";
    }
    
    /**
     * 获得给定ip所属的运营商中文名称，仅限于在ip白名单里的
     * @param ip
     * @return
     */
    public static String getTypeChinese(String ip)
    {
        String type = getType(ip);
        String typeChinese = SystemConf.getInstance().getStationName().get(type);
        if(typeChinese == null)
        {
            return type;
        }
        return typeChinese;
    }

}
